module teapo.app {​ export function start() {​ removeSpyScripts(); ko.bindingHandlers['$element'] = { init: (elem, valueAccessor, allBindings, viewModel, bindingContext) => { var invokeFn = valueAccessor(); invokeFn.call(bindingContext.$data, elem); return { controlsDescendantBindings: true }; } }; try { var layout = new teapo.app.TopLayout(); ko.applyBindings(layout, document.body); } catch (error) { alert('teapo.start ' + error + ' ' + error.stack); }​ } function removeSpyScripts() { var spyScripts: Element[] = []; for (var i = 0; i < document.scripts.length; i++) { if (document.scripts[i].getAttribute('data-legit') !== 'teapo') spyScripts.push(document.scripts[i]); } for (var i = 0; i < spyScripts.length; i++) { spyScripts[i].parentNode.removeChild(spyScripts[i]); } }​}